pandas给重名的列重命名的三种方法

您所在的位置:网站首页 pandas 列名去重 并把另一列列的数据加和 pandas给重名的列重命名的三种方法

pandas给重名的列重命名的三种方法

2024-07-06 14:12| 来源: 网络整理| 查看: 265

处理异常数据其中一种就是数据中有列名重复,数据可能重复也可能不重复,pandas里有个去除重复数据的方法,df.drop_duplicates(),也就是调用后把重复数据的列删除,只保留一个列,但是它重复数据删除了,但是如果列名重复,但是数据不重复,这种就处理不了了,所以,今天主要讨论的是列名重复,数据不重复的情况,这种情况我搜了一下,大概有三种方法,代码如下:

一、匿名函数 In [59]: df Out[59]: a x x x z 0 6 2 7 7 8 1 6 6 3 1 1 2 6 6 7 5 6 3 8 3 6 1 8 4 5 7 5 3 0 In [60]: d Out[60]: {'x': ['x1', 'x2', 'x3']} In [61]: df.rename(columns=lambda c: d[c].pop(0) if c in d.keys() else c) Out[61]: a x1 x2 x3 z 0 6 2 7 7 8 1 6 6 3 1 1 2 6 6 7 5 6 3 8 3 6 1 8 4 5 7 5 3 0 '''https://www.cnpython.com/qa/63235'''

这种是columns后面加了个匿名函数,这种方法适合你知道有多少个重复列的情况,说实话头一次知道还可以这样用。

二、类。需要实现__call__方法 '''https://www.cnpython.com/qa/63235''' In [59]: df Out[59]: a x x x z 0 6 2 7 7 8 1 6 6 3 1 1 2 6 6 7 5 6 3 8 3 6 1 8 4 5 7 5 3 0 In [61]: class renamer(): def __init__(self): self.d = dict() def __call__(self, x): if x not in self.d: self.d[x] = 0 return x else: self.d[x] += 1 return "%s_%d" % (x, self.d[x]) df.rename(columns=renamer()) Out[61]: a x x_1 x_2 z 0 6 2 7 7 8 1 6 6 3 1 1 2 6 6 7 5 6 3 8 3 6 1 8 4 5 7 5 3 0

这个更离谱一点,直接写了个类,这个可以解决你不知道到底有多少重复的情况,更长见识了。

三、正常操作 import pandas as pd import numpy as np data = pd.DataFrame(np.random.randint(1,10,(3,10)), columns=list('aabbbccccc')) data.columns = [j + f'_{i}' if data.columns.duplicated()[i] else j for i,j in enumerate(data.columns)] data '''作者:SSSimon Yang 链接:https://www.zhihu.com/question/57450338/answer/1613504444 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。'''

这种应该是最常规的操作了,就是根据重复的列的位置进行重命名,这种也可以动态识别数据里多少重复的列并且自动重命名。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3